\documentclass[a4paper,spanish] {article} 
\usepackage [spanish] {babel} 
\usepackage [latin1]{inputenc}
\usepackage{graphicx}
\usepackage{caratula}
\usepackage{subfig}
\usepackage{dsfont}
\usepackage{algorithm}\usepackage{amsmath}
\usepackage{algorithmic}
\usepackage{sidecap}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\pagestyle{empty}

\newcommand{\real}{\ensuremath{\mathbb{R}}}


\parindent = 0 pt
\parskip = 11 pt

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\pagestyle{empty}

%links
\usepackage{hyperref}
\hypersetup{
    colorlinks,%
    citecolor=blue,%
    filecolor=blue,%
    linkcolor=blue,%
    urlcolor=blue
}


\addtolength{\oddsidemargin}{-1in}
\addtolength{\textwidth}{2in}


\begin{document}
\pagestyle{headings}



\newpage

\materia{Sistemas Operativos}
\submateria{Segundo Cuatrimestre del 2011}
\titulo{Scheduling de Tareas }

\integrante{Gonzalo Fuentes Bahamondes}{412/10}{ness00@gmail.com}
\integrante{Helen Lizana}{118/08}{hsle.22@gmail.com}
\integrante{Gabriel Astorgano}{}{astorsk81991@hotmail.com}

\resumen{\textbf{Resumen: } }


\palabras_clave{\textbf{Palabras clave: } }

\maketitle


\newpage
\tableofcontents
\newpage

\newpage

\section{Introducci\'on }

Este trabajo pr\'actico se enfoca en el an\'alisis de las interacciones de procesos y los distintos tipos de Schedulers, como FIFO, Round Robim, RDLS y otros.
El scheduler es un componente funcional muy importante de los sistemas operativos multitarea y multiproceso, y es esencial en los sistemas operativos de tiempo real. Su funci\'on consiste en repartir el tiempo disponible de un microprocesador entre todos los procesos que est\'an disponibles para su ejecuci\'on.Si se utiliza bien este concepto, se logra la ilusi\'on de que se est\'an ejecutando en simult\'aneo varias tareas. Recordemos que el procesador, solo puede ejecutar una instrucci\'on por vez.

A la hora de implementar un scheduler se tienen en cuenta diferentes pol\'iticas:
\begin{itemize}
   \item Ecuanimidad (fairness): que cada proceso reciba una dosis ''justa'' de CPU (para alguna definici\'on de justicia).  
   \item Eficiencia: tratar de que la CPU est\'e ocupada todo el tiempo.  
   \item Carga del sistema: minimizar la cant. de procesos listos que est\'en esperando CPU. 
   \item Tiempo de respuesta: minimizar el tiempo de respuesta percibido por los usuarios interactivos.
   \item Latencia: minimizar el tiempo requerido para que un proceso empiece a dar resultados.
   \item Tiempo ejecuci\'on: minimizar el tiempo total que le toma a un proceso ejecutar 	completamente.
   \item Rendimiento (throughput): maximizar el n\'umero de procesos terminados por unidad de tiempo. 
   \item Liberaci\'on de recursos: hacer que terminen cuanto antes los procesos que tiene reservados m\'as recursos. 
\end{itemize}
Dichas politicas son contradictorias entre si, lo cual lleva a realizar una combinacion de algunas de estas para mejorar el rendimiento. Debido a estas politicas no se puede decir cual ser\'ia el mejor scheduler.


\subsection{Ejercicio 6}

En este ejercicio nos piden programar la tarea tipo \textbf{TaskBatch} que recibe dos par\'ametros:  total de CPU $(total\_cpu)$ y cantidad de bloqueos $(cant\_blocks)$. Esta tarea debe realizar $cant\_blocks$ llamadas bloqueantes, en momentos elegidos pseudoaleatoriamente. Cada llamada bloqueante debe durar un $(1)$ ciclo de reloj. 
\\El tiempo de CPU total que utilice una tarea TaskBatch ser\'a el $total\_cpu$ ciclos de reloj (incluyendo el tiempo utilizado para a lanzar las llamadas bloqueantes, no as\'i el tiempo en que la tarea permanezca bloqueada)

Para esto creamos un vector booleano: ''bloqueos'', que contendra en cada posicion \textbf{true} si se puede ejecutar dicho ciclo o \textbf{false} en caso contrario, cada posicion del vector se llena de forma aleatoria respetando la cantidad de bloqueos que se paso como parametro. Luego en otro ciclo se ejecuta el uso del cpu dependiendo del valor que contenga el vector ''bloqueos'' en cada iteracion.

\begin{verbatim}

function TaskBatch( total_cpu, cant_bloqueos)
  vector bloqueos
  for i de cant_bloqueos
    random = rand() mod total_cpu
    if bloqueos(random)
      i--
    else
      bloqueos(random)= true
    end if
  end for

  for i de total_cpu
    if bloqueos(i)
      bloquear cpu
    else
      usar cpu
    end if
  end for
end function

\end{verbatim}
\section{Discusi\'on}


\section{Conclusi\'on}

\section{Ap\'endices}


\subsection{Ap\'endice B: c\'odigo relevante}

\section{Referencias}

\begin{thebibliography}{widest-label}


\end{thebibliography}

\end{document}
